package net.xinqushi.socket.nio;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;

/**
 * @author xjie 2019/7/17 16:25
 * 注意register()方法的第二个参数。这是一个“interest集合”，
 * 意思是在通过Selector监听Channel时对什么事件感兴趣。可以监听四种不同类型的事件：
 * Connect  连接就绪
 * Accept   接收就绪
 * Read     读就绪
 * Write    写就绪
 * 通道触发了一个事件意思是该事件已经就绪。所以，某个channel成功连接到另一个服务器称为“连接就绪”。
 * 一个server socket channel准备好接收新进入的连接称为“接收就绪”。一个有数据可读的通道可以说是“读就绪”。等待写数据的通道可以说是“写就绪”。
 */
public class SelectorServer {
    //与Selector一起使用时，Channel必须处于非阻塞模式下。这意味着不能将FileChannel
    //与Selector一起使用，因为FileChannel不能切换到非阻塞模式。而套接字通道都可以。

    private Selector selector;
    private ByteBuffer readBuffer = ByteBuffer.allocate(1024);//调整缓存的大小可以看到打印输出的变化
    private ByteBuffer sendBuffer = ByteBuffer.allocate(1024);//调整缓存的大小可以看到打印输出的变化


    public static void main(String[] args) throws IOException {
        ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
        serverSocketChannel.socket().bind(new InetSocketAddress(5555));
        serverSocketChannel.configureBlocking(false);
    }
}
